在股市投資中,大家最常聽到的一句話就是:「不要把雞蛋放在同一個籃子裡」。這句話的核心就是 分散投資。分散投資能降低單一股票或產業帶來的風險,讓投資組合的波動性下降。同時,正確的 停損策略 也能避免因過度抱股而導致的巨大虧損。今天我們就來談談這兩個重要觀念,並且用程式模擬一下。
降低單一風險:如果投資組合裡只有一檔股票,該公司出現財報雷或產業危機,整體資產會受到嚴重衝擊。
不同產業配置:同時持有科技股、金融股、能源股,可以避免產業循環的波動影響過大。
跨資產配置:除了股票,也能配置債券、ETF、黃金或現金,提升組合穩健度。
設定停損點:例如買進股票後若下跌 10%,就果斷賣出,避免虧損擴大。
紀律執行:停損是保護資金的重要手段,避免因情緒而持續加碼,陷入無底洞。
風險控管公式:
停損金額 = 投資本金 × 可承受虧損比例(例如 2%)
部位大小 = 停損金額 ÷ (進場價格 - 停損價格)
我們來看看假設投資人想分散投資在 蘋果 (AAPL)、微軟 (MSFT)、Google (GOOG)、Tesla (TSLA) 四檔股票,並設定 10% 停損 策略。
python
import yfinance as yf
import pandas as pd
# 設定投資組合
stocks = ["AAPL", "MSFT", "GOOG", "TSLA"]
weights = [0.25, 0.25, 0.25, 0.25] # 均等分散
# 抓取過去 6 個月的股價,保留 Adj Close
data = yf.download(stocks, period="6mo", auto_adjust=False)["Adj Close"]
# 計算投資組合的每日報酬
returns = data.pct_change().dropna()
portfolio_return = (returns * weights).sum(axis=1)
# 假設投資本金 100,000
initial_capital = 100000
portfolio_value = (1 + portfolio_return).cumprod() * initial_capital
# 設定停損:若單一股票跌超過 10% 就觸發停損訊號
stop_loss = {}
for stock in stocks:
max_price = data[stock].cummax()
drawdown = (data[stock] - max_price) / max_price
stop_loss_dates = drawdown[drawdown < -0.10].index
stop_loss[stock] = stop_loss_dates
# 結果輸出
print("投資組合最終價值:", round(portfolio_value.iloc[-1], 2))
for stock, dates in stop_loss.items():
if len(dates) > 0:
print(f"{stock} 觸發停損日期:")
for d in dates:
print(" -", d.strftime("%Y-%m-%d"))
else:
print(f"{stock} 在觀察期間內沒有觸發停損")
投資組合報酬計算:將四檔股票依照 25% 權重分散配置。
停損檢查:判斷股價是否從最高點回落超過 10%。
輸出結果:顯示最終投資組合價值,以及各股票是否在期間內觸發停損。
auto_adjust=False → 確保下載回來的 DataFrame 有 "Adj Close" 欄位。
portfolio_value[-1] 改成 portfolio_value.iloc[-1] → 避免 FutureWarning。
dates.date 改成 dates.date.tolist() → 讓日期列表一次輸出,而不是丟一個 index object 出來。
我有另外修改成 逐行印出日期的方式,並且用 strftime("%Y-%m-%d") 格式化成清楚的年月日。
分散投資能降低系統性風險,停損策略則能保護本金。
投資不是避免風險,而是 管理風險。
程式化工具能幫助投資人客觀檢視投資組合,減少情緒影響。
👉明天將進入 第二週 AI 分析應用 的第一步!
Day 8 我會手把手註冊 OpenAI API Key,五分鐘就能完成,讓 AI 正式加入我們的投資工具箱 🚀。